支撑亿级用户“刷手机”,百度Feed流背后的新技术装备有多牛?
以下文章来源于全球IT行业网 ,作者高飞
导读:截止到2018年底,我国网民使用手机上网的比例已高达98.6%,移动互联网基本全方位覆盖。智能手机的操作模式让我们更倾向于通过简单的“划屏”动作,相对于传统的文本交互方式来获取信息,用户更希望一拿起手机就能刷到自己感兴趣的新闻资讯、短视频和促销信息。因此,基于信息自动聚合,能向用户推送个性化内容的Feed流服务也越来越受青睐,同时正在成为越来越多互联网公司赢得用户的重要手段。
作为全球IT和互联网行业的领先企业,百度始终致力于成为最懂用户的高科技公司。为了向用户提供更高效、更流畅的Feed流服务,百度基于自身在搜索引擎,人工智能等方面的技术优势,构建了核心内存数据库Feed-Cube,来为Feed流服务提供高并发、大容量和高性能的数据存取服务。但是随着百度业务进一步拓展,Feed-Cub也需要为之部署更大容量的内存来承载规模激增的数据,而动态随机存取存储器(DRAM)内存昂贵的价格,使内存扩展带来的总拥有成本 (TCO)压力不断抬升。
在此背景下,为了保证性能的同时有效降低TCO,百度与英特尔展开深入技术合作,引入了全新的英特尔傲腾数据中心及持久内存,并将Feed-Cube的核心工作场景迁移至傲腾构建的全新内存平台上。自此,百度全新Feed-Cube诞生了。
百度Feed流服务的进阶之路
数以亿计的用户规模,促使百度在构建其 Feed 流服务系统时,必须考虑千万量级的并发服务,以及更低延迟的数据处理性能,而这其中的关键,就是存储和信息查询能力的建设。
百度核心应用中的Feed流服务
基于 DRAM 内存构建的百度 Feed-Cube 虽然在高/大并发(每秒千万次查询)、海量数据存储(PB 级)环境下一直有着优异的性能表现,但随着百度 Feed 流服务规模的不断扩大,也在不断面临新的挑战。一方面,使用价格较为昂贵的 DRAM 内存来构建大内存池,正使得百度的 TCO 不断抬升;另一方面,单位 DRAM 内存有限的容量,也限制了 Feed-Cube流处理能力的进一步提升。
百度 Feed-Cube 工作示意图
为应对上述挑战,百度Feed-Cube开始尝试仅配置DRAM内存的模式和使用DRAM内存与英特尔®傲腾数据中心级持久内存的混合配置模式,再到全面部置在英特尔®傲腾数据中心级持久内存上的模式的测试,我们接下来一起看看这一系列测试结果如何。
1、DRAM 内存和 NVMe固态盘
首先使用性能不断提升的、基于非易失性存储(NVM)技术的存储设备,如 NVMe固态盘,来存储 Feed-Cube 中的数据文件和哈希表。为验证使用 NVMe 固态盘后的系统性能,百度分别基于 DRAM 内存和 NVMe 固态盘构建了两个 Feed-Cube 集群来进行对比性测试。测试结果表明,与 DRAM 内存相比,下沉到 NVMe 固态盘的Feed-Cube 出现了多方面的问题。
2、DRAM内存与英特尔傲腾数据中心级持久内存的混合配置模式
基于英特尔 3D XPoint 存储技术打造的英特尔®傲腾数据中心级持久内存,则为这些问题的破解提供了全新路径,这种旨在革新内存和存储架构的全新产品类别相比固态盘,拥有更高的读写性能、更低的访问延时以及更高的耐用性,在多用户、高并发和大容量的场景下有着非常突出的综合应用优势。
有鉴于此,百度首先引入英特尔®傲腾数据中心级持久内存,用于存储 Feed-Cube 中的数据文件部分,而哈希表仍使用 DRAM 内存。采用这一混合配置的目的,一方面是为了验证英特尔®傲腾数据中心级持久内存在 Feed-Cube 中的性能表现;另一方面,Feed-Cube 在查询 Value 值的过程中,读哈希表的次数要远大于读数据文件,因此先在数据文件部分进行替换,可以尽可能减少对 Feed-Cube 性能的影响。
为了使英特尔®傲腾数据中心级持久内存能够成功地应用于Feed-Cube,百度与英特尔一起围绕系统硬件、操作系统、内核等组件进行了全方位的优化。
双方首先将 Feed-Cube 部署在了基于第二代英特尔®至强可扩展处理器的平台上,该处理器不仅能提供更为强劲的计算性能,还是英特尔®傲腾数据中心级持久内存的“良配”;其次,为保证新硬件能充分释放性能潜力,英特尔还根据Feed-Cube 应用场景的需求,在服务器 BIOS 中加入了对英特尔®傲腾数据中心级持久内存的支持驱动,并在百度自研 4 系 Linux内核的基础上,增添了相关的补丁。完成这一系列优化“组合拳”后,百度在随后进行的、对比纯 DRAM内存模式与混合配置模式的测试中,模拟了实际场景中可能出现的大并发两千万级访问压力。测试结果如图所示。
可以看出,采用混合配置模式后,Feed-Cube 在 2 千万大并发访问压力下,平均访问耗时仅上升约 24%(30 微秒)处理器消耗整机占比上升7% ,性能波动均在百度可接受的范围内。而与此同时,单服务器的 DRAM 内存使用量下降过半,这对于 Feed-Cube PB 级的存储容量而言,无疑可大大降低成本。上述混合配置模式的成功,促使百度进一步尝试在 Feed-Cube 中采用全部配置英特尔®傲腾数据中心级持久内存的模式。
Feed-Cube 分别在纯 DRAM 内存模式及 DRAM 内存+ 英特尔®傲腾数据中心级持久内存混合配置模式下的对比测试结果
3、全面部置在英特尔®傲腾数据中心级持久内存上的模式
在全部采用英特尔®傲腾数据中心级持久内存构建 Feed-Cube 后,百度也对其性能表现和资源消耗情况进行了测试。如图所示,以每秒 50 万次查询(QPS)的访问压力为例,测试结果显示:只配置英特尔®傲腾数据中心级持久内存的平均时延与只配置DRAM 内存的方案相比,上升约 9.66% ,性能波动也在百度可接受的范围内。
不同配置下处理时延对比
三种模式下,在大并发访问压力下的性能表现以及资源消耗均符合百度预期,测试表明全面部署英特尔傲腾数据中心级持久内存模式完全可为百度 Feed 流服务提供最快最高性能数据存取支撑。
优化内存结构,释放傲腾价值
在开展与 Feed 流服务相关的验证及测试的同时,百度还在其他多个业务场景中探索了使用英特尔®傲腾数据中心级持久内存的可行性及使用场景。
以某核心业务模块系统的故障恢复为例,该业务模块在原来采用DRAM内存部署时,一旦遇到停电、宕机等突发故障时,就需要从后台固态盘/HDD硬盘中重新加载数据来恢复服务,这一过程往往需要耗时数十分钟之久,严重影响服务的启动和上线效率。而利用英特尔®傲腾数据中心级持久内存高速的读写性能以及非易失性特性,现在这一加载时间被缩减到了秒级。
回顾上述使用场景,清晰可见的是:英特尔®傲腾数据中心级持久内存带来的高密度内存与热启动特性,正在助推“功能即服务”(FaaS)的持续创新和发展。作为未来云服务的重要方向,FaaS 基于“无服务器”特性的功能框架,其短暂的生命周期(甚至仅有数秒)对启动速度要求更高,对内存需求更多。百度对于 FaaS 的探索,在英特尔傲腾数据中心级持久内存的助力下,在启动速度和 TCO 两方面,有显著提升。
未来,百度与英特尔还计划继续围绕英特尔®傲腾数据中心级持久内存,以及与其搭配的第二代英特尔®至强可扩展处理器等一系列先进产品与技术,开展更多也更为深入的技术交流与协作,让它们能够在更多互联网核心业务场景,以及关键应用和服务中发挥更为重要的作用,释放英特尔傲腾更多价值,也能帮助百度在这些技术的助推之下,向用户提供更为多样和完善的产品用户体验。